/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package entidade.persistencia;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author victorinox
 */
@Entity
@Table(name = "venda", catalog = "carlossa03", schema = "")
@NamedQueries({@NamedQuery(name = "Venda.findAll", query = "SELECT v FROM Venda v"), @NamedQuery(name = "Venda.findByVendaId", query = "SELECT v FROM Venda v WHERE v.vendaId = :vendaId"), @NamedQuery(name = "Venda.findByDataVenda", query = "SELECT v FROM Venda v WHERE v.dataVenda = :dataVenda"), @NamedQuery(name = "Venda.findByDataEntrega", query = "SELECT v FROM Venda v WHERE v.dataEntrega = :dataEntrega"), @NamedQuery(name = "Venda.findByDataPagamento", query = "SELECT v FROM Venda v WHERE v.dataPagamento = :dataPagamento"), @NamedQuery(name = "Venda.findByValorTransporte", query = "SELECT v FROM Venda v WHERE v.valorTransporte = :valorTransporte"), @NamedQuery(name = "Venda.findBySeguroTransporte", query = "SELECT v FROM Venda v WHERE v.seguroTransporte = :seguroTransporte"), @NamedQuery(name = "Venda.findByJurosMes", query = "SELECT v FROM Venda v WHERE v.jurosMes = :jurosMes"), @NamedQuery(name = "Venda.findByTotalVenda", query = "SELECT v FROM Venda v WHERE v.totalVenda = :totalVenda")})
public class Venda implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "venda_id")
    private Integer vendaId;
    @Lob
    @Column(name = "observacao")
    private String observacao;
    @Basic(optional = false)
    @Column(name = "data_venda")
    @Temporal(TemporalType.DATE)
    private Date dataVenda;
    @Basic(optional = false)
    @Column(name = "data_entrega")
    @Temporal(TemporalType.DATE)
    private Date dataEntrega;
    @Basic(optional = false)
    @Column(name = "data_pagamento")
    @Temporal(TemporalType.DATE)
    private Date dataPagamento;
    @Column(name = "valor_transporte")
    private Float valorTransporte = 0f;
    @Column(name = "seguro_transporte")
    private Float seguroTransporte = 0f;
    @ManyToMany(mappedBy = "vendaCollection", fetch = FetchType.LAZY)
    private List<EntradaSaida> entradaSaidaCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "venda", fetch = FetchType.LAZY)
    private List<ProdutoVenda> produtoVendaCollection;
    @OneToMany(mappedBy = "vendaId", fetch = FetchType.LAZY)
    private List<OpercaoExtra> opercaoExtraCollection;
    @JoinColumn(name = "funcionario_id", referencedColumnName = "funcionario_id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Funcionario funcionarioId;
    @JoinColumn(name = "cliente_id", referencedColumnName = "usuario_id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Usuario clienteId;
    @JoinColumn(name = "transportador_id", referencedColumnName = "usuario_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Usuario transportadorId;
    @Column(name = "juros_mes")
    private Float jurosMes = 0f;
    @Column(name = "total_venda")
    private Float totalVenda = 0f;

    public Venda() {
    }

    public Venda(Integer vendaId) {
        this.vendaId = vendaId;
    }

    public Venda(Integer vendaId, Date dataVenda, Date dataEntrega, Date dataPagamento) {
        this.vendaId = vendaId;
        this.dataVenda = dataVenda;
        this.dataEntrega = dataEntrega;
        this.dataPagamento = dataPagamento;
    }

    public Integer getVendaId() {
        return vendaId;
    }

    public void setVendaId(Integer vendaId) {
        this.vendaId = vendaId;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public Date getDataVenda() {
        if(dataVenda == null){
            dataVenda = new Date();
        }
        return dataVenda;
    }

    public void setDataVenda(Date dataVenda) {
        this.dataVenda = dataVenda;
    }

    public Date getDataEntrega() {
        if(dataEntrega ==null){
            dataEntrega = new Date();
        }
        return dataEntrega;
    }

    public void setDataEntrega(Date dataEntrega) {
        this.dataEntrega = dataEntrega;
    }

    public Date getDataPagamento() {
        if(dataPagamento == null){
            dataPagamento = new Date();
        }
        return dataPagamento;
    }

    public void setDataPagamento(Date dataPagamento) {
        this.dataPagamento = dataPagamento;
    }

    public Float getValorTransporte() {
        return valorTransporte;
    }

    public void setValorTransporte(Float valorTransporte) {
        this.valorTransporte = valorTransporte;
    }

    public Float getSeguroTransporte() {
        return seguroTransporte;
    }

    public void setSeguroTransporte(Float seguroTransporte) {
        this.seguroTransporte = seguroTransporte;
    }

    public Float getJurosMes() {
        return jurosMes;
    }

    public void setJurosMes(Float jurosMes) {
        this.jurosMes = jurosMes;
    }

    public Float getTotalVenda() {
        return totalVenda;
    }

    public void setTotalVenda(Float totalVenda) {
        this.totalVenda = totalVenda;
    }

    public List<EntradaSaida> getEntradaSaidaCollection() {
        return entradaSaidaCollection;
    }

    public void setEntradaSaidaCollection(List<EntradaSaida> entradaSaidaCollection) {
        this.entradaSaidaCollection = entradaSaidaCollection;
    }

    public List<OpercaoExtra> getOpercaoExtraCollection() {
        return opercaoExtraCollection;
    }

    public void setOpercaoExtraCollection(List<OpercaoExtra> opercaoExtraCollection) {
        this.opercaoExtraCollection = opercaoExtraCollection;
    }

    public List<ProdutoVenda> getProdutoVendaCollection() {
        return produtoVendaCollection;
    }

    public int getProdutoVendaCollectionSize() {
        if(produtoVendaCollection == null){
            return 0;
        }
        int total = 0;
        for(int i = 0; i < produtoVendaCollection.size(); i++){
            ProdutoVenda pv = produtoVendaCollection.get(i);
            total += pv.getQuantidade();
        }

        return total;
    }

    public void setProdutoVendaCollection(List<ProdutoVenda> produtoVendaCollection) {
        this.produtoVendaCollection = produtoVendaCollection;
    }

    public Funcionario getFuncionarioId() {
        return funcionarioId;
    }

    public void setFuncionarioId(Funcionario funcionarioId) {
        this.funcionarioId = funcionarioId;
    }

    public Usuario getClienteId() {
        return clienteId;
    }

    public void setClienteId(Usuario clienteId) {
        this.clienteId = clienteId;
    }

    public Usuario getTransportadorId() {
        return transportadorId;
    }

    public void setTransportadorId(Usuario transportadorId) {
        this.transportadorId = transportadorId;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (vendaId != null ? vendaId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Venda)) {
            return false;
        }
        Venda other = (Venda) object;
        if ((this.vendaId == null && other.vendaId != null) || (this.vendaId != null && !this.vendaId.equals(other.vendaId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entidade.persistencia.Venda[vendaId=" + vendaId + "]";
    }

}
